]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
appDisplay: Don't emit 'apps-changed' when deleting folder
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Thu, 24 Sep 2020 16:36:40 +0000 (13:36 -0300)
committerFlorian Müllner <florian.muellner@gmail.com>
Mon, 5 Oct 2020 12:06:47 +0000 (12:06 +0000)
To delete a folder, FolderView needs to reset all keys under that particular
folder's GSettings path. That generates 5 'changed' signals, all of which
end up calling AppDisplay._redisplay(), which is costly.

Don't emit 'apps-changed' when deleting a folder.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1447

js/ui/appDisplay.js

index 66a4557bb7023d49ebe9a16db471f8878ef5e8cd..8979d7e57c73525175e046b0beb89fb380cccfa6 100644 (file)
@@ -1639,6 +1639,7 @@ class FolderView extends BaseAppView {
         action.connect('pan', this._onPan.bind(this));
         this._scrollView.add_action(action);
 
+        this._deletingFolder = false;
         this._appIds = [];
         this._redisplay();
     }
@@ -1809,6 +1810,8 @@ class FolderView extends BaseAppView {
         // Remove the folder if this is the last app icon; otherwise,
         // just remove the icon
         if (folderApps.length == 0) {
+            this._deletingFolder = true;
+
             // Resetting all keys deletes the relocatable schema
             let keys = this._folder.settings_schema.list_keys();
             for (const key of keys)
@@ -1818,6 +1821,8 @@ class FolderView extends BaseAppView {
             let folders = settings.get_strv('folder-children');
             folders.splice(folders.indexOf(this._id), 1);
             settings.set_strv('folder-children', folders);
+
+            this._deletingFolder = false;
         } else {
             // If this is a categories-based folder, also add it to
             // the list of excluded apps
@@ -1831,6 +1836,10 @@ class FolderView extends BaseAppView {
             this._folder.set_strv('apps', folderApps);
         }
     }
+
+    get deletingFolder() {
+        return this._deletingFolder;
+    }
 });
 
 var FolderIcon = GObject.registerClass({
@@ -1972,6 +1981,9 @@ var FolderIcon = GObject.registerClass({
     }
 
     _sync() {
+        if (this.view.deletingFolder)
+            return;
+
         this.emit('apps-changed');
         this._updateName();
         this.visible = this.view.getAllItems().length > 0;